import getUserTempId from "@/utils/userTempId";
import { SET_USERTOKEN_STATE, SET_USERINFO_SATAE, RESET_USER_STATE } from "../constant-type";
import { reqLogin, reqUserInfo, reqLogout } from "@/api";
import { getToken, setToken, removeToken } from "@/utils/token";

const state = {
    userTempId: getUserTempId(),
    token: getToken() || "",
    userInfo: {},
}
const mutations = {
    // 1.修改vuex数据token的值
    [SET_USERTOKEN_STATE](state, payload) {
        state.token = payload.token;
        // 持久化存储token
        // alert(state.token)
        setToken(payload.token);
    },

    // 2.修改vuex数据userInfo的值
    [SET_USERINFO_SATAE](state, payload) {
        state.userInfo = payload.userInfo;
    },

    // 3.重置token和user数据
    [RESET_USER_STATE](state) {
        state.token = "";  // 清除token
        removeToken();  // 清除持久化存储的token
        state.userInfo = {};  // 清除用户信息
    }

};
const actions = {
    // 登录成功请求获取token
    async reqLogin({ commit }, userInfo) {
        try {
            const result = await reqLogin(userInfo);
            // console.log(result, "reqLogin");
            commit(SET_USERTOKEN_STATE, result)
        } catch (error) {
            alert(error.message)
            return Promise.reject();//这样就算是异常了,可以让调用函数的地方得到一个失败的Promise进行异常处理
        }
    },

    // 2.请求用户信息
    async getUserInfo({ commit }) {
        try {
            const result = await reqUserInfo();
            // console.log(result, "reqUserInfo");
            commit(SET_USERINFO_SATAE, { userInfo: result })
        } catch (error) {
            alert(error.message);
            return Promise.reject(error);
            //因为当前函数已经使用try处理异常了,所以在调用函数的地方无法得到异常存在,所以需要我们在catch的位置进行抛出失败的promise,在当前函数在失败的情况下就会返回失败的promise
        }
    },

    // 3.退出登录
    async getLogout({ commit }) {
        try {
            await reqLogout();
            // alert("退出登录成功");
            // 清理数据
            commit(RESET_USER_STATE)
        } catch (error) {
            alert(error.message)
        }
    },

    // 4.清理user数据的action方法
    resetToken({ commit }) {
        commit(RESET_USER_STATE);
    },
}

export default {
    namespaced: true,
    state,
    mutations,
    actions,
}